package br.com.puertorico.common.exceptions;

/**
 * Deve ser utilizada para exce&ccedil;&otilde;es da aplica&ccedil;&atilde;o.
 * S&atilde;o situa&ccedil;&otilde;es esperadas de erros. Significa pontos onde
 * uma valida&ccedil;&otilde;o pode falhar e realmente falhar&aacute; algumas
 * vezes durante a execu&ccedil;&atilde;o, por mais cuidadoso que o operador
 * seja. Estas exce&ccedil;&otilde;es devem ser capturadas e tratadas, para que
 * uma mensagem apropriada seja propagada at&eacute; o usu&aacute;rio final.
 * Exce&ccedil;&otilde;es deste tipo incluem falhas em valida&ccedil;&otilde;es
 * de dados e situa&ccedil;&otilde;es de erro previstas em regra de
 * neg&oacute;cio. Exemplos: "UsuarioNaoEncontradoException" durante um
 * servi&ccedil;o de login, "PedidoSemItensException" quando inserindo um pedido
 * sem itens, etc.
 *
 * @author <a href="mailto:daniel.camargo@ufms.br">Daniel Camargo</a>
 * @version 1.0
 */
public class ApplicationException extends Exception {

	/** SerialVersionUID. */
	private static final long serialVersionUID = 1L;

	/** The params. */
	private String[] params;

	/**
	 * Construtor default.
	 */
	public ApplicationException() {
		super();
	}

	public ApplicationException(String message) {
		super(message);
	}

	public ApplicationException(Throwable cause) {
		super(cause);
	}

	public ApplicationException(String message, Throwable cause) {
		super(message, cause);
	}

	/**
	 * Construtor que recebe um conjunto de par&acirc;mentros.
	 *
	 * @param params
	 *            the params
	 */
	public ApplicationException(String... params) {
		super();
		this.params = params;
	}

	/**
	 * Construtor com uma mensagem, o problema e um conjunto de
	 * par&acirc;metros.
	 *
	 * @param msg
	 *            the msg
	 * @param arg1
	 *            the arg1
	 * @param params
	 *            the params
	 */
	public ApplicationException(String msg, Throwable arg1, String... params) {
		super(msg, arg1);
		this.params = params;
	}

	/**
	 * Construtor apenas com uma mensagem e um conjunto de par&acirc;metros.
	 *
	 * @param msg
	 *            the msg
	 * @param params
	 *            the params
	 */
	public ApplicationException(String msg, String params) {
		super(msg);
	}

	/**
	 * M&eacute;todo de recupera&ccedil;&atilde;o do campo params.
	 *
	 * @return o campo params
	 */
	public String[] getParams() {
		return params;
	}

	/**
	 * M&eacute;todo de atribui&ccedil;&atilde;o do campo params.
	 *
	 * @param params
	 *            o novo valor para o campo params
	 */
	public void setParams(String... params) {
		this.params = params;
	}

}
